package com.proyecto.core.vista.echo.componentes;

import java.util.ResourceBundle;

import nextapp.echo2.app.ApplicationInstance;
import nextapp.echo2.app.Component;
import nextapp.echo2.app.ContentPane;
import nextapp.echo2.app.Extent;
import nextapp.echo2.app.SplitPane;
import nextapp.echo2.app.event.ActionEvent;
import nextapp.echo2.app.event.ActionListener;

import com.proyecto.core.modelo.excepciones.GeneralException;
import com.proyecto.core.vista.echo.base.RwBotoneraAceptarCancelar;
import com.proyecto.core.vista.echo.constantes.AccionVentana;
import com.proyecto.core.vista.echo.constantes.MensajeTipo;
import com.proyecto.core.vista.echo.interfaces.ICPAreaClaves;

import consultas.echo2consultas.SpWindowPane;

public class WPClaves extends SpWindowPane {
	
	private static final long serialVersionUID = -6841752394219037591L;

	@SuppressWarnings("unused")
	private ResourceBundle resourceBundle;
	private String claveMensaje;
	protected ContentPane cpPrincipal = ApplicationInstance.getActive()
						                .getDefaultWindow().getContent();	
    private ActionListener actionProcessorAceptar = new ActionListener() {
		private static final long serialVersionUID = 1707984151832872154L;
		public void actionPerformed(ActionEvent e) { 
        	ejecutarAccionAceptar();
        	if (esClaveAceptada)
        		getParent().remove(WPClaves.this);
        }
    };
    
    private ActionListener actionProcessorCancelar = new ActionListener() {
		private static final long serialVersionUID = -3870743761443935023L;
		public void actionPerformed(ActionEvent e) {
        	ejecutarAccionCancelar();
            getParent().remove(WPClaves.this);
        }
    };
    
    private Object  resultadoClaves;
	private Integer accion;
	private boolean esClaveAceptada;
	
	private RwBotoneraAceptarCancelar rwBotoneraAceptarCancelar;
	//private String claveTemp;
	private ICPAreaClaves cpClaves;
	private SplitPane spAreas;

	public WPClaves(ICPAreaClaves pCPClaves) {
        super();
        initComponents();
        this.cpClaves = pCPClaves;
        this.cpClaves.setWpClaves(this);
        this.setTitle(pCPClaves.getTituloVentana());
        this.setStyleName("DefaultSPWinPane");
        this.setResizable(false);
        this.setMaximizable(false);
        this.setMinimizable(false);
        this.setHeight(new Extent((pCPClaves.getAreaDatosAlto() == null ? 250 : pCPClaves.getAreaDatosAlto()), Extent.PX));
		this.setWidth(new Extent((pCPClaves.getAreaDatosAncho() == null ? 400 : pCPClaves.getAreaDatosAncho()), Extent.PX));
		
        rwBotoneraAceptarCancelar.getBtnAceptar().addActionListener(actionProcessorAceptar);
        rwBotoneraAceptarCancelar.getBtnCancelar().addActionListener(actionProcessorCancelar);
        rwBotoneraAceptarCancelar.getBtnInfoSistema().inicializar(this.getClass().getName(), 
        														  cpClaves.getClass().getName(), 
        														  cpClaves.getServicioNombre());
        spAreas.add((Component) cpClaves);
    }
    
	protected void ejecutarAccionIncluir() {
		cpClaves.rutinaAccionIncluir();
	}
	
	protected void ejecutarAccionMostrar() {
		cpClaves.rutinaAccionMostrar();
	}

	protected void ejecutarAccionConsultarPre(){
		cpClaves.rutinaAccionConsultarPre();
		this.ejecutarAccionMostrar();
	}

	protected Object ejecutarAccionConsultar() throws GeneralException{
		return cpClaves.rutinaAccionConsultar();
	}
	
	protected void ejecutarAccionAceptar() {
		String  mensajeCompleto   = "";
		boolean errorAceptar      = true;
		boolean errorCamposClaves = false;
		GeneralException eLocal   = null; 
			
		resultadoClaves = null;
		try {
			cpClaves.rutinaAccionAceptar();
			errorAceptar = false;
			resultadoClaves = ejecutarAccionConsultar();
		} catch (GeneralException e) {
			claveMensaje ="NO HAY MENSAJE DEFINIDO";
			eLocal = e;
			try{
				claveMensaje = eLocal.obtenerMensajeCompleto(ApplicationInstance.getActive().getLocale());
			}catch (Exception e1){}
		}//EoTC
		
		if (errorAceptar) {
			DialogoMensajes dm = new DialogoMensajes("Error",claveMensaje,MensajeTipo.ALERTA);
			cpPrincipal.add(dm);
			esClaveAceptada = false;
		}else{
			if(accion.equals(AccionVentana.MODO_CONSULTAR)){
				if (resultadoClaves==null){
					DialogoMensajes dm = new DialogoMensajes("Error",claveMensaje,MensajeTipo.ALERTA);
					cpPrincipal.add(dm);
					esClaveAceptada = false;
				}else{ 
					esClaveAceptada = true;
				}
			}else if(accion.equals(AccionVentana.MODO_INCLUIR)) { 
				if (resultadoClaves != null){
					eLocal = new GeneralException(cpClaves.getMensajeClave());
					claveMensaje = eLocal.obtenerMensajeCompleto(ApplicationInstance.getActive().getLocale()); 
					DialogoMensajes dm = new DialogoMensajes("Error",claveMensaje,MensajeTipo.ALERTA);
					cpPrincipal.add(dm);
					esClaveAceptada = false;
				}else {
					resultadoClaves = cpClaves.getObjetoDTO();
					esClaveAceptada = true;
				}
			
			}
		}//EoIE
	}//EoM

	protected void ejecutarAccionAceptar_Old() {
		String  mensajeCompleto   = "";
		boolean errorAceptar      = true;
		boolean errorCamposClaves = false;
		
		resultadoClaves = null;
		try {
			cpClaves.rutinaAccionAceptar();
			errorAceptar = false;
			resultadoClaves = ejecutarAccionConsultar();
		} catch (GeneralException e) {
			claveMensaje ="NO HAY MENSAJE DEFINIDO";
			try{
				claveMensaje = cpClaves.getMensajeError().getString(e.getClaveMensaje());
				mensajeCompleto = e.getForaneoMensajeCompleto(cpClaves.getMensajeError(), cpClaves.getResourceBundle());
				if (mensajeCompleto != null){
					errorCamposClaves = (e.getClaveMensaje().indexOf("cpclave.campos_obligatorios") != -1);
				}//EoI
			}catch (Exception e1){}
		}//EoTC
		
		if (errorAceptar) {
			if (errorCamposClaves){
				claveMensaje = mensajeCompleto;
			}
			DialogoMensajes dm = new DialogoMensajes("Error",claveMensaje,MensajeTipo.ALERTA);
			cpPrincipal.add(dm);
			esClaveAceptada = false;
		}else{
			if(accion.equals(AccionVentana.MODO_CONSULTAR)){
				if (resultadoClaves==null){
					DialogoMensajes dm = new DialogoMensajes("Error",claveMensaje,MensajeTipo.ALERTA);
					ApplicationInstance.getActive().getDefaultWindow().getContent().add(dm);
					esClaveAceptada = false;
				}else{ 
					esClaveAceptada = true;
				}
			}else if(accion.equals(AccionVentana.MODO_INCLUIR)) { 
				if (resultadoClaves != null){
					claveMensaje = cpClaves.getMensajeError().getString(cpClaves.getMensajeClave());
					DialogoMensajes dm = new DialogoMensajes("Error",claveMensaje,MensajeTipo.ALERTA);
					ApplicationInstance.getActive().getDefaultWindow().getContent().add(dm);
					esClaveAceptada = false;
				}else {
					resultadoClaves = cpClaves.getObjetoDTO();
					esClaveAceptada = true;
				}
			
			}
		}//EoIE
	}//EoM
	
	protected void ejecutarAccionCancelar() {
		esClaveAceptada = false;
	}

	final public void activar(Integer     pAccion,
							  ContentPane pPadre) {
		this.setAccion(pAccion);
		cpClaves.setAccion(pAccion);
		switch (accion) {
		case AccionVentana.MODO_INCLUIR:
			ejecutarAccionIncluir();
			break;
		case AccionVentana.MODO_CONSULTAR:
			ejecutarAccionConsultarPre();
			break;
		default:
			break;
		}
		pPadre.add(this);
	}

	/**
	 * @return the resultadoClaves
	 */
	public Object getResultadoClaves() {
		return resultadoClaves;
	}
	
	public void setResultadoClaves(Object o ){
		this.resultadoClaves = o;
	}

	final public Object getObjetoDTO() {
		return cpClaves.getObjetoDTO();
	}
	
	
	final public boolean getEsClaveAceptada() {
		return esClaveAceptada;
	}

	final protected void cAreaDatosadd() {
		
	}
	
	public void setAccion(Integer accion) {
		this.accion = accion;
	}

	public void addActionListener(ActionListener l) {
        getEventListenerList().addListener(ActionListener.class, l);
    }
    
    public void removeActionListener(ActionListener l) {
        getEventListenerList().removeListener(ActionListener.class, l);
    }

	final public RwBotoneraAceptarCancelar getRwBotoneraAceptarCancelar() {
		return rwBotoneraAceptarCancelar;
	}

	public String getClaveMensaje() {
		return claveMensaje;
	}

	public void setClaveMensaje(String claveMensaje) {
		this.claveMensaje = claveMensaje;
	}

	/**
	 * Configures initial state of component.
	 * WARNING: AUTO-GENERATED METHOD.
	 * Contents will be overwritten.
	 */
	private void initComponents() {
		resourceBundle = ResourceBundle.getBundle(
				"com.proyecto.core.vista.echo.resource.localization.etiquetas",
				ApplicationInstance.getActive().getLocale());
		this.setHeight(new Extent(250, Extent.PX));
		this.setModal(true);
		spAreas = new SplitPane();
		spAreas.setOrientation(SplitPane.ORIENTATION_VERTICAL_BOTTOM_TOP);
		spAreas.setSeparatorPosition(new Extent(32, Extent.PX));
		add(spAreas);
		rwBotoneraAceptarCancelar = new RwBotoneraAceptarCancelar();
		spAreas.add(rwBotoneraAceptarCancelar);
	}
	
}
